<?php

require_once 'classes/Localite.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements de Localites
 */
class SClocalite implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une localite
    * @param Localite Localite à ajouter
    */
   public function ajouter($uneLocaliteAAjouter) {
       
       try{
           
           $query =  $this->db->prepare("INSERT INTO localite " .
                   "(npa, nom, region_nom, pays_nom ) VALUES(" .
                   ":npa, :nom, :region_nom, :pays_nom)");

           $query->execute(array(
                   'npa'          => $uneLocaliteAAjouter->getNpa(), 
                   'nom'          => $uneLocaliteAAjouter->getNom(),
                   'region_nom'   => $uneLocaliteAAjouter->getRegion_nom(),
                   'pays_nom'     => $uneLocaliteAAjouter->getPays_nom()
               ));

           $query->closeCursor();
       }
       catch(PDOException $e)
        {
            return new Message("Localite non ajoutée:".$e->getMessage());
        }
               return $uneLocaliteAAjouter;
   }
    /**
     * Methode permettant de modifier une localite
     * @param Localite localite à modifier
     * @return boolean 
     */
    public function modifier($uneLocaliteAModifier){
        try{
           $query =  $this->db->prepare("UPDATE localite SET " .
                   "nom=:nom, region_nom=:region_nom, pays_nom=:pays_nom WHERE npa= :npa;");

           $query->execute(array(
                   'npa'          => $uneLocaliteAModifier->getNpa(),
                   'nom'          => $uneLocaliteAModifier->getNom(),
                   'region_nom'   => $uneLocaliteAModifier->getRegion_nom(),
                   'pays_nom'     => $uneLocaliteAModifier->getPays_nom()
               ));
                   $this->db->query($query->queryString);

           
           }
                catch(PDOException $e)
        {
            return new Message("Localite non modifiée:".$e->getMessage());
        }
               return $uneLocaliteAModifier;
    }
    /**
     * Methode permettant de supprimer une localite
     * @param Localite Localite à supprimer
     * @return boolean 
     */
    public function supprimer($uneLocaliteASupprimer){
        try{
        $query = "DELETE FROM localite WHERE localite_npa='".$uneLocaliteASupprimer.";";
                   
                $this->db->query($query);
                $message = new Message("Localite supprimée");
                
                }
                catch(PDOException $e)
        {
            $message = new Message("Localite non supprimée:".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Localite localiteALister de recherche sous forme d'objet Localite
     * @return un tableau d'objet Localite
     */
    public function lister($localiteALister){
        try{
            $sql="SELECT * FROM localite ";
            $sql_Where="WHERE";
            if($localiteALister!=NULL)
            {
                if($localiteALister->getNpa()!=NULL)
                    $sql_Where.=" npa = '".$localiteALister->getNpa()."' AND ";
                if($localiteALister->getNom()!=NULL)
                    $sql_Where.=" nom LIKE '%".$localiteALister->getNom()."%' AND ";
                if($localiteALister->getNom()!=NULL)
                    $sql_Where.=" region_nom LIKE '%".$localiteALister->getRegion_nom()."%' AND ";
                if($localiteALister->getPays_nom()!=NULL)
                    $sql_Where.=" pays_nom LIKE '%".$localiteALister->getPays_nom()."%' AND ";
            }         
                
            $sql_Where = substr($sql_Where,0,-5); 
            $sql.=$sql_Where." ORDER BY npa;";
            $lesLocalitesTrouvees=NULL;
            $uneLocaliteLue=NULL;
            $result=$this->db->query($sql);
            while($row = $result->fetch(PDO::FETCH_ASSOC))
            {   
                $uneLocaliteLue = new Localite($row['npa'],$row['nom'],$row['region_nom'],$row['pays_nom']);
               
                    $lesLocalitesTrouvees[]=$uneLocaliteLue;
            }        
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesLocalitesTrouvees=NULL;
        }
        return $lesLocalitesTrouvees;
    }

  
}

?>
